#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#include<ctime>
#define IOS ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=1000000;
namespace find_maxn{
    int a[maxn];
    int len,min_num,max_num;
    //产生随机数组   
    void initRandomize()
    {
        int i;
        srand(time(0));  						// 设置种子,并生成伪随机序列
        for(i = 1; i <=len; ++i)
            a[i] = rand() % (max_num - min_num + 1) + min_num; // 得到从[min, max]之间的随机数
        return ;
    }
    //输出随机数组的值
    void print(){
        for(int i=1;i<=len;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return ;
    }
    //递归求最大值
    int search_digui(int n){
        if(n==1)return a[1];
        return max(a[n],search_digui(n-1));
    }
    //分治求最大值
    int search_fenzhi(int l,int r){
        if(l>=r)return a[r];
        int mid=a[l],pre=l,rear=r+1;
        while(pre<rear){
            while(pre<r&&a[++pre]<mid);
            while(a[--rear]>mid);
            if(pre<rear)swap(a[pre],a[rear]);
        }
        swap(a[rear],a[l]);
        return search_fenzhi(rear+1,r);
    }
};

int main()
{
    IOS;
    //随机数数组的长度
    cout<<"随机数组的长度:";
    cin>>find_maxn::len;
    //随机数数组的元素范围
    cout<<"随机数组的范围:";
    cin>>find_maxn::min_num>>find_maxn::max_num;
    //产生随机数组
    find_maxn::initRandomize();
    //输出随机数组
    find_maxn::print();
    cout<<"递归法求得的最大值:"<<find_maxn::search_digui(find_maxn::len)<<endl;
    cout<<"分治法求得的最大值:"<<find_maxn::search_fenzhi(1,find_maxn::len)<<endl;
    getchar();
    getchar();
    return 0;
}
